import * as _ from './utils/underscore';
import { deepEqual } from 'assert';
// 判断两个对象相等(参数是否相等)

/* 
  相当的定义
*/

// +0 === -0 true
// function eq(a, b) {
//   if (a === b) return a !== 0 || 1 / a === 1 / b;
// }

// NaN 与 NaN
// function eq (a, b) {
//   if (a !== a) return b !== b;
// }

// eq第一版
function eq (a, b) {
  // === 结果为 true 的区别出 +0 和 -0
  if (a === b) return a !== 0 || 1 / a === 1 / b;

  // typeof null 的结果为 object, 这里做判断，是为了让有 null 的情况尽早退出函数
  if (a === null || b === null) return false;

  // 判断NaN
  if (+a !== +a) return +b !== +b;

  // 判断参数 a 类型，如果是基本类型，在这里可以直接返回false
  var type = typeof a;
  if (type !== 'function' && type !== 'object' && typeof b !== 'object') return false;

  // 更复杂的对象使用 deepEq 深度比较
  return deepEqual(a, b);
}

var toString = 
function deepEq (a, b) {
  var className = toString.call(a);
  if (className !== toString.call(b)) return false;

  switch (className) {
    case '[object RegExp]':
    case '[object String]':
      return '' + a === '' + b;
    case '[object Number]':
      if (+a !== +a) return +b !== +b;
      return +a === 0 ? 1 / +a === 1 / b : +a === +b;
    case '[object Date]':
    case '[object Boolean]':
      return +a === +b;
  }

  // 其他判断
  var areArrays = className === '[object Array]';
  // 不是数组
  if (!areArrays) {
    // 过滤掉两个函数的情况
    if (typeof a !== 'object' || typeof b != 'object') return false;

    var aCtor = a.constructor;
    var bCtor = b.constructor;
    
  }
}

console.log(eq(0, -0))
console.log(eq(NaN, NaN));

function Person () {
  this.name = name;
}

function Animal () {
  this.name = name;
}

var person = new Person('zhouyang');
var animal = new Animal('zhouyang');

console.log(eq(person, animal))